/**
 * dependency: include.commoncode.jsp
 */
var gridUtil = {
	//
	getRowData: function(gridId, delIds, lastrow, lastcol) {
		var $grid = $("#list");
		
		// 현재 편집상태인 셀 저장
		if (lastrow != undefined && lastrow != -1 && lastcol != undefined && lastcol != -1) {
			$grid.jqGrid("saveCell", lastrow, lastcol);
		}
		
		// update된 내용과 삭제된 내용으로 구성, 'getRowData'는 전체 데이터 
		var rows = $grid.jqGrid("getChangedCells", "all");
		for (var i = 0; i < rows.length; i++) {
		    var row = $grid.jqGrid("getInd", rows[i].id, true);
		    
			if (row && $(row).hasClass("added")) {
				rows[i]["added"] = true; // 추가된 데이터의 경우 'added' 데이터멤버 추가
			}
		}
		
		for (var i = 0; delIds && i < delIds.length; i++) { rows.push({id:delIds[i], deleted:true}); }
			
		return {data: rows};
	},	
	//
	addRow: function(gridId, newId, defaults, editColIndex) {
	    var $grid = $("#" + gridId);
	    
		$grid.jqGrid("addRowData", newId, defaults, "last");
	    var row = $grid.jqGrid("getInd", newId, true);
	    if (row) {
	    	$(row).addClass("edited");
	    	$(row).addClass("added");
	    }
	    
	    // getChangedCells에 Row를 포함시키는 작업 - TD의 CSS를 'dirty-cell'로 지정
	    for (var key in defaults) { 
	    	$grid.jqGrid("setCell", newId, key, defaults[key], "dirty-cell");
	    }
	    
	    // 새로 추가된 Row의 RowIndex를 구함 (editCell은 jqGrid wiki / cell editing에서 참조)
	    var rowIndex = $grid.jqGrid("getInd", newId);
	    if (editColIndex) {
	    	$grid.jqGrid("editCell", rowIndex, editColIndex, true); // 2: 두번째 컬럼을 편집상태로
	    }
	},
	// jqGrid 포맷터 - 조회모드에서 공통코드값을 키,값 에트리부터를 가진 span으로 변환
	formatterCodeSelect: function(gb) {
	    return function(value, option, row) {
	        var result = (value ? getCommonCodeValue(gb, value) : "");
	        var html = "<span key='" + (value ? value : "") + "' value='" + (result ? result : "") + "'>" + (result ? result : "") + "</span>";
	        return html;
	    }
	},
	// jqGrid 언포맷터 - 조회모드에서 공통코드 셀렉트박스로부터 코드값을 식별
	unformatSelect: function(value, option, cell) {
	    return $(cell).children("span").attr("key");
	},
	// 편집모드로 변환시 화면에 표시될 select 엘리먼트로 변환
	customSelectElem: function(gb) {
	    return function(value, option) {
	        var html = (value ? getCodeSelectHtml(gb, value) : "");
	        return $(html);
	    }
	},
	// 편집모드에서 값을 조회시 select 엘리먼트에서 값 식별
	customSelectValue: function(elem, operation, value) {
	    return $(elem).val();
	},
	// jqGrid 포맷터 - 조회모드에서 true 값을 표시하는 span으로 변환
	formatterCheckbox: function(yesVal) {
		return function(value, option, row) {
			return "<span value='" + (value ? value : "") + "' " + (value == yesVal ? " class='ui-icon ui-icon-check' " : "") + "></span>";
		}
	},
	unformatCheckbox: function(value, option, cell) {
	    return $(cell).children("span").attr("value");
	},
	customCheckboxElem: function(yesVal) {
		return function(value, option) {
			return $("<input type='checkbox'" + (value == yesVal ? " checked='checked' " : "") + "/>");
		}
	},
	customCheckboxValue: function(elem, operation, value) {
		return ($(elem).is(":checked") ? "Y" : "N");
	},
	getCodeTextCodModel: function(name, width, codeGroupStr) {
		return {
			name:name, index:name, width:width, editable:true, 
			formatter: this.formatterCodeSelect(codeGroupStr), unformat: this.unformatSelect 
		}
	},
	// 
	getCodeSelectColModel: function(name, width, codeGroupStr) {
		return {
			name:name, index:name, width:width, editable:true, 
			formatter: this.formatterCodeSelect(codeGroupStr), unformat: this.unformatSelect, 
			edittype:"custom", 
			editoptions:{custom_element: this.customSelectElem(codeGroupStr), custom_value: this.customSelectValue}
		}
	},
	//
	getDateColModel: function(name, width) {
		return {
			name:name, index:name, width:width, editable:true, align:"center", editoptions:{dataInit: function(el) { $(el).datepicker($.datepicker.regional["ko"]); }}
		}
	},
	// 
	getCheckColModel: function(name, width, yesVal) {
		return {
			name:name, width:width, editable:true, align:"center", 
			formatter: this.formatterCheckbox(yesVal), unformat: this.unformatCheckbox, 
			edittype:"custom", 
			editoptions:{custom_element: this.customCheckboxElem(yesVal), custom_value: this.customCheckboxValue}
		}
	}
}


